

void main(){
  // 可选位置参数
  sum(1,2,3);
  sum(1,2);

  //  可选命名参数
  sum3(1, c:6, b:4);
  sum3(1);
  sum3(1,  b:4);

  int a = add88(1, 3);
  print(a);

  dynamic b = add99(1, 3);
  print(b); // 输入 null
}

// 这是一个最简单的函数
int add(int a, int b){
  return a+b;
}

/**
 *   可以不写返回类型，编译器会自动判断，，也就是默认返回了dynamic
 */
add88(int a, int b){
  return a+b;
}

/**
 * 如果是这种，则默认返回dynamic类型
 */
add99(int a, int b){

}

/**
 * 可选参数---可选位置参数，，，，：使用方括号[]包裹，并且在调用时按照参数的位置传递值；
 * 调用的时候必须按照位置来
 */
int sum(int a, int b, [int? c]){
  if(c!= null){
    return a+b+c;
  }
  return a+b;
}

/**
 * 参数默认值
 */
int sum2(int a, [int? b, int c =3]){
      int sum = a;
      if(b!= null){
        sum += b;
      }
      if(c!= null){
        sum += c;
      }
      return sum;
}

/**
 * 可选命名参数，，，， 使用大括号{}包裹，并在调用时指定参数的名称；
 * 也就是可以不按函数定义顺序传值
 */
int sum3(int a, {int? b, int? c}){
  int sum = a;
  if(b!= null){
    sum += b;
  }
  if(c!= null){
    sum += c;
  }
  return sum;
}

int sum4(int a, {int? b, int c=6}){
  int sum = a;
  if(b!= null){
    sum += b;
  }
  if(c!= null){
    sum += c;
  }
  return sum;
}

